今天我學會了 Python 中兩種常見的迴圈結構:for 迴圈與 while 迴圈。程式不再是一次性地執行,而是可以根據條件重複做同樣的事情,讓整個邏輯更有節奏感!
for i in range(5):
print("第", i + 1, "次 Hello!")
輸出:
count = 0
while count < 5:
print("還沒滿五次喔")
count += 1
for i in range(5, 0, -1):
print(i)
print("時間到!")
range() 的使用:range(5) 是從 0 開始到 4,總共 5 次。
for i in range(1, 10):
for j in range(1, 10):
print(f"{i} x {j} = {i*j}", end="\t")
print()
answer = "7"
guess = ""
while True:
guess = input("猜一個數字:")
if guess == answer:
print("猜對了!")
break
else:
print("再試一次~")
while 要小心無限迴圈!如果忘記在迴圈裡加上變化條件的話,程式就會一直跑下去不會停。
今天學會了for迴圈與while迴圈,讓程式能夠根據條件自動重複執行動作。透過這個單元,我寫出了倒數計時器、九九乘法表以及猜數字的高互動性小遊戲,讓我再次感覺到Java的噩夢!當初做出這些遊戲的時候感到很驚奇,幾行的英文加數字就可以跑出這些厲害的東西。但說到for與while迴圈,不難想到的就是「排序法」!當遇上巢狀迴圈,i要順著走j要逆著走,i++,j--的更是難上加難。就算花了很多時間理解,也還是不太敢寫,覺得自己一不小心就會錯誤百出。所以,我想藉由這次,再次理解Java的排序法以及Python的排序法。當作是這個單元的進階挑戰!
先回顧一下Java的九九乘法表:
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= 9; j++) {
System.out.print(i + " x " + j + " = " + (i * j) + "\t");
}
System.out.println();
}
氣泡排序(Java):
public class BubbleSort {
public static void main(String[] args) {
int[] arr = {64, 25, 12, 22, 11};
int n = arr.length; // 取得陣列的長度,存入變數 n
for (int i = 0; i < n - 1; i++) { // 外層迴圈控制回合次數,總共要跑 n-1 回合
for (int j = 0; j < n - 1 - i; j++) { // 內層迴圈控制每回合的比較次數,會逐次減少
if (arr[j] > arr[j + 1]) { // 比較相鄰的兩個元素
// 如果前一個比後一個大,就交換兩個元素
int temp = arr[j]; // 暫存 arr[j] 的值
arr[j] = arr[j + 1]; // 把 arr[j + 1] 的值放進 arr[j]
arr[j + 1] = temp; // 把暫存值放回 arr[j + 1]
}
}
}
System.out.print("排序後:");
for (int i = 0; i < n; i++) { // 用另一個 for 迴圈印出排序後的結果
System.out.print(arr[i] + " ");
}
}
}
Java 元素 | 說明 |
---|---|
int[] arr = {...} |
宣告一個整數陣列並初始化 |
for 迴圈 |
控制重複執行的流程 |
if (arr[j] > arr[j + 1]) |
判斷是否需要交換 |
temp |
Java 無法像 Python 一樣一行交換兩變數,所以需要使用「暫存變數」 |
Python中的氣泡排序:
# 定義一個氣泡排序函式
def bubble_sort(arr):
n = len(arr)
for i in range(n - 1): # 外層控制回合數,共需 n-1 回合
for j in range(n - 1 - i): # 每回合比較次數逐漸減少
if arr[j] > arr[j + 1]: # 如果前一個比後一個大,就交換
arr[j], arr[j + 1] = arr[j + 1], arr[j]
return arr
# 測試資料
data = [64, 25, 12, 22, 11]
sorted_data = bubble_sort(data)
print("排序後的結果:", sorted_data)
功能 | Java | Python |
---|---|---|
陣列宣告 | int[] arr = {} |
arr = [] |
變數型別 | 必須明確指定,如 int |
不用指定型別,自動推斷 |
交換變數 | 需用 temp 中間變數 |
a, b = b, a 一行交換 |
陣列長度 | arr.length |
len(arr) |
我覺得最難的是要想他的結構以及要怎麼跑(i要怎麼遞增j要怎麼遞減、要跑幾次、n是甚麼k是甚麼)。當變數一多,我的腦袋常常就會卡住。
打開風塵在桌面上的eclipse,在建立檔案時甚至猶豫了一下python後面要加.py,java要加.java嗎?這次除了學習python之外,也一直在複習Java的語法,希望這30天除了學習python之外,Java也能有所收穫!
明天,我會繼續學習更進階的流程控制技巧,包括巢狀邏輯與 break、continue 這兩個關鍵指令,讓程式更有彈性、反應更即時!